package main

import (
	"context"
	"fmt"
	"io/ioutil"
	"log"
	"os"
	"time"
)

// App struct
type App struct {
	ctx context.Context
}

// NewApp creates a new App application struct
func NewApp() *App {
	return &App{}
}

// startup is called when the app starts. The context is saved
// so we can call the runtime methods
func (a *App) startup(ctx context.Context) {
	a.ctx = ctx
}

// 获取到两个项目在差异
func (a *App) Greet(pathA string, pathB string) string {
	// 判断 pathA 目录是否存在
	if pathA == "" {
		return ResError("项目A文件夹不存在")
	}

	if pathB == "" {
		return ResError("项目B文件夹不存在")
	}

	// go 判断目录是否存在
	if _, err := os.Stat(pathA); os.IsNotExist(err) {
		return ResError("项目A文件夹不存在")
	}

	if _, err := os.Stat(pathB); os.IsNotExist(err) {
		return ResError("项目B文件夹不存在")
	}

	// 获取到时间戳
	nowTime := time.Now().UnixMilli()
	fmt.Println("时间戳毫秒级：", nowTime)

	checkInfo := CheckProject(pathA, pathB)

	endTime := time.Now().UnixMilli()

	return ResSuccessData(checkInfo, "操作完成", endTime-nowTime)
}

func (a *App) AsyncFile(pathA string, pathB string, fileStrs string) string {
	// 判断 pathA 目录是否存在
	if pathA == "" {
		return ResError("项目A文件夹不存在")
	}

	if pathB == "" {
		return ResError("项目B文件夹不存在")
	}

	if fileStrs == "" {
		return ResError("同步文件不得为空")
	}

	// go 判断目录是否存在
	if _, err := os.Stat(pathA); os.IsNotExist(err) {
		return ResError("项目A文件夹不存在")
	}

	if _, err := os.Stat(pathB); os.IsNotExist(err) {
		return ResError("项目B文件夹不存在")
	}

	// 获取到时间戳
	nowTime := time.Now().UnixMilli()
	fmt.Println("时间戳毫秒级：", nowTime)

	AsyncFile(pathA, pathB, fileStrs)

	// checkInfo := CheckProject(pathA, pathB)

	endTime := time.Now().UnixMilli()
	fmt.Println(endTime)

	return ResSuccess("同步成功")
}

func (a *App) GetFile(pathA string, pathB string) string {
	// 判断 pathA 目录是否存在
	if pathA == "" {
		return ResError("项目A文件夹不存在")
	}

	// if pathB == "" {
	// 	return ResError("项目B文件夹不存在")
	// }

	// go 判断目录是否存在
	if _, err := os.Stat(pathA); os.IsNotExist(err) {
		return ResError("项目A文件不存在")
	}

	// if _, err := os.Stat(pathB); os.IsNotExist(err) {
	// 	return ResError("项目B文件不存在")
	// }

	// 获取到时间戳
	nowTime := time.Now().UnixMilli()
	fmt.Println("时间戳毫秒级：", nowTime)

	fmt.Println(pathA)
	dataA, err := ioutil.ReadFile(pathA)
	if err != nil {
		log.Panicf("failed reading data from file: %s", err)
	}

	d := make(map[string]interface{})
	d["fileB"] = ""

	if pathB != "" {
		fmt.Println(pathB)
		dataB, err := ioutil.ReadFile(pathB)
		if err != nil {
			log.Panicf("failed reading data from file: %s", err)
		}
		d["fileB"] = string(dataB)
	}

	// checkInfo := CheckProject(pathA, pathB)

	// endTime := time.Now().UnixMilli()

	d["fileA"] = string(dataA)
	return ResSuccessData(d, "获取成功", 0)
}
